home *** CD-ROM | disk | FTP | other *** search
/ Die Ultimative Software-P…i Collection 1996 & 1997 / Die Ultimative Software-Pakete CD-ROM fur Atari Collection 1996 & 1997.iso / tt / menue.tt / menue.lst < prev   
Encoding:
File List  |  1996-09-18  |  10.7 KB  |  452 lines

  1. vers$=" FNT_ED.GFA, V.1/o, 4.April.91, ATARI-ST/TT, v.Pfr.S.Just,6936 Haag,Kirchweg 5 "
  2. '
  3. ' ON ERROR GOSUB schluss
  4. ON BREAK GOSUB schluss
  5. ON MENU KEY GOSUB m_getkey
  6. ON MENU GOSUB m_deal
  7. '
  8. @m_init
  9. @m_aufbau
  10. @main
  11. @schluss
  12. END
  13. '
  14. PROCEDURE m_init
  15.  LOCAL h%,n%,nmax%,mmax%,hx%,d%,i%,dummy%,h$
  16.  '
  17.  scrn_breit_pix%=WORK_OUT(0)
  18.  scrn_hoeh_pix%=WORK_OUT(1)
  19.  scrn_mono!=(WORK_OUT(35)=0)
  20.  scrn_breit_byt%=INT{L~A+2}
  21.  '
  22.  esc$=CHR$(27)
  23.  inv$=esc$+"p"
  24.  norm$=esc$+"q"
  25.  '
  26. m_dat:
  27.  ' MERGE-Punkt
  28.  DATA Desk ,0,  CLS,0,----------------,0, ,0, ,0, ,0, ,0, ,0, ,0, ,0,""
  29.  DATA Datei ,0, Laden,1, Speichern,2,------,0, QUIT,3,""
  30.  DATA Font ,0, WechsleFont,4, Blank,6, System-Font,7, Invers,8, dünner,9, fetter,10, rotieren,23,- Horizontal<>,0, spiegeln,0, dehnen,0, stauchen,0,-Vertikal ^v,0, spiegeln,0, dehnen,0, stauchen,0,""
  31.  DATA Buchstabe ,0,-Auch Direkt!,0, Copy->Puffer,15, Paste,16, Kill,17, Invers,18, Tauschen,19, dünner,20, fetter,21,- Horizontal<>,0, spiegeln,0, dehnen,0, stauchen,0,- Vertikal ^v,0, spiegeln,0, dehnen,0, stauchen,0,""
  32.  DATA Hilfen ,0, Raster,25,-----,0, Hilfe-Seite,22,""
  33.  DATA ""
  34.  '
  35.  ' Finde DIM-Grenzen
  36.  RESTORE m_dat
  37.  h%=0
  38.  nmax%=0
  39.  mmax%=0
  40.  DO
  41.   READ h$
  42.   EXIT IF h$=""
  43.   READ dummy%
  44.   INC h%
  45.   n%=0
  46.   DO
  47.    READ h$
  48.    EXIT IF h$=""
  49.    READ dummy%
  50.    INC n%
  51.   LOOP
  52.   IF h%=1 THEN
  53.    mmax%=n%
  54.   ELSE
  55.    nmax%=MAX(nmax%,n%)
  56.   ENDIF
  57.  LOOP
  58.  DEC h%
  59.  m.hs%=h%
  60.  m.nmax%=nmax%
  61.  DIM m.titel$(mmax%)
  62.  DIM m.h_titl$(m.hs%+1),m.hx%(m.hs%+1),m.he%(m.hs%+1),m.hc$(m.hs%+1),m.ne%(m.hs%+1),m.ns%(m.hs%+1),m.ns_pix%(m.hs%+1)
  63.  DIM m.n_titl$(m.hs%+1,m.nmax%+1),m.nc$(m.hs%+1,m.nmax%+1),m.nc_p%(m.hs%+1,m.nmax%+1),m.n_geht!(m.hs%+1,m.nmax%+1),m.com_nr%(m.hs%+1,m.nmax%+1)
  64.  ARRAYFILL m.hx%(),0
  65.  ARRAYFILL m.he%(),0
  66.  ARRAYFILL m.ns%(),0
  67.  ARRAYFILL m.ns_pix%(),19
  68.  ARRAYFILL m.ne%(),0
  69.  ARRAYFILL m.nc_p%(),0
  70.  ARRAYFILL m.com_nr%(),0
  71.  ARRAYFILL m.n_geht!(),TRUE
  72.  '
  73.  ' Fuelle Arrays, Finde Grenzen
  74.  RESTORE m_dat
  75.  h%=0
  76.  DO
  77.   READ h$
  78.   EXIT IF h$=""
  79.   READ dummy%
  80.   m.titel$(h%)=h$
  81.   INC h%
  82.  LOOP
  83.  '
  84.  h%=0
  85.  hx%=80 ! Linker Rand eines Menues
  86.  DO
  87.   READ h$
  88.   EXIT IF h$=""
  89.   READ dummy%
  90.   INC h%
  91.   m.h_titl$(h%)=h$
  92.   m.hc$(h%)=LEFT$(h$,1)
  93.   m.hx%(h%)=hx%
  94.   ADD hx%,SHL(ADD(LEN(h$),1),3)
  95.   m.he%(h%)=SUB(hx%,8)
  96.   IF m.he%(h%)>scrn_breit_pix% THEN
  97.    ALERT 1,"Menü|zu lang!",1,"WEITER",d%
  98.   ENDIF
  99.   n%=0
  100.   DO
  101.    READ h$
  102.    EXIT IF h$=""
  103.    INC n%
  104.    READ m.com_nr%(h%,n%)
  105.    m.n_titl$(h%,n%)=h$
  106.    m.ne%(h%)=MAX(m.ne%(h%),SHL(ADD(LEN(h$),1),3))
  107.    IF LEFT$(h$,1)="-" THEN
  108.     m.n_geht!(h%,n%)=FALSE
  109.    ELSE
  110.     i%=0
  111.     REPEAT
  112.      INC i%
  113.     UNTIL MID$(h$,i%,1)>"@" OR i%=LEN(h$)
  114.     IF i%<LEN(h$) THEN
  115.      m.nc$(h%,n%)=MID$(h$,i%,1)
  116.      DEC i%
  117.      m.nc_p%(h%,n%)=SHL(i%,3)
  118.     ENDIF
  119.    ENDIF
  120.   LOOP
  121.   ADD m.ne%(h%),m.hx%(h%)
  122.   m.ns%(h%)=n%
  123.   ADD m.ns_pix%(h%),ADD(SHL(n%,4),2)
  124.  LOOP
  125.  '
  126.  MENU m.titel$()
  127.  DEFMOUSE 0
  128.  m.key&=0
  129.  ABSOLUTE m.asc|,V:m.key&+1
  130.  ABSOLUTE m.scan|,V:m.key&
  131.  '
  132. RETURN ! m_init
  133. '
  134. PROCEDURE m_aufbau
  135.  LOCAL i%
  136.  DEFFILL 1,2,7
  137.  PBOX 0,0,scrn_breit_pix%,scrn_hoeh_pix%
  138.  DEFFILL 0,0
  139.  PBOX 0,0,scrn_breit_pix%,17
  140.  IF scrn_breit_byt%=160 THEN
  141.   DEFTEXT ,4,,6
  142.   TEXT 16,8,"Desk"
  143.   tt!=TRUE
  144.  ELSE
  145.   DEFTEXT ,4,,13
  146.   TEXT 16,13,"Desk"
  147.   tt!=FALSE
  148.  ENDIF
  149.  DEFTEXT ,1,,13
  150.  FOR i%=1 TO m.hs%
  151.   TEXT m.hx%(i%),13,m.h_titl$(i%)
  152.   LINE ADD(m.hx%(i%),1),15,ADD(m.hx%(i%),6),15
  153.  NEXT i%
  154.  LINE 0,17,scrn_breit_pix%,17
  155.  LINE 0,18,scrn_breit_pix%,18
  156. RETURN ! m_aufbau
  157. '
  158. PROCEDURE main
  159.  LOCAL idx%,t$,htitl$,hmen$,ntitl$,nmen$,oldhidx%,dummy%,abbruch!,no%,w%,hopen!,hidx%,nidx%
  160.  '
  161.  hopen!=FALSE
  162.  abbruch!=FALSE
  163.  '
  164.  DO
  165.   m.key&=0
  166.   '
  167.   SHOWM
  168.   REPEAT
  169.    '
  170.    ON MENU
  171.    MOUSE mx%,my%,mk%
  172.    '
  173.    IF mx%>80 AND mx%<m.he%(m.hs%) THEN
  174.     ' Maus im moeglichen Menuebereich
  175.     IF my%<18 THEN
  176.      ' Maus im Menueleisten-Bereich
  177.      idx%=0
  178.      REPEAT
  179.       INC idx%
  180.      UNTIL (mx%>m.hx%(idx%) AND mx%<m.he%(idx%)) OR idx%>m.hs%
  181.      IF idx%<=m.hs% THEN
  182.       ' Gueltiger Hauptmenue-Index
  183.       IF idx%<>hidx% THEN
  184.        IF hidx%>0 THEN
  185.         PUT m.hx%(hidx%),1,htitl$
  186.         PUT m.hx%(hidx%),19,nmen$
  187.        ENDIF
  188.        hidx%=idx%
  189.        oldhidx%=idx%
  190.        GET m.hx%(hidx%),1,m.he%(hidx%),15,htitl$
  191.        PUT m.hx%(hidx%),1,htitl$,10
  192.        GET m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%),nmen$
  193.        DEFFILL 0,0
  194.        PBOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
  195.        BOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
  196.        FOR i%=1 TO m.ns%(hidx%)
  197.         IF m.n_geht!(hidx%,i%) THEN
  198.          DEFTEXT ,0,,13
  199.         ELSE
  200.          DEFTEXT ,2,,13
  201.         ENDIF
  202.         TEXT m.hx%(hidx%)+2,17+i%*16,m.n_titl$(hidx%,i%)
  203.         IF m.n_geht!(hidx%,i%) AND m.nc$(hidx%,i%)<"[" THEN
  204.          LINE m.hx%(hidx%)+3+m.nc_p%(hidx%,i%),19+i%*16,m.hx%(hidx%)+9+m.nc_p%(hidx%,i%),19+i%*16
  205.         ENDIF
  206.        NEXT i%
  207.        hopen!=TRUE
  208.       ENDIF
  209.      ENDIF
  210.     ELSE
  211.      ' Maus im Bereich der Nebenmenues unter der Hauptmenue-Leiste
  212.      IF hopen! THEN
  213.       ' Nebenmenue aufgeklappt, sonst KEINE Aktion!
  214.       IF my%>19 AND my%<m.ns_pix%(hidx%) AND mx%>m.hx%(hidx%) AND mx%<m.ne%(hidx%) THEN
  215.        ' Maus im exakten Nebenmenue-Bereich
  216.        SUB my%,19
  217.        idx%=MIN(m.ns%(hidx%),ADD(SHR(my%,4),1))
  218.        IF idx%<>nidx% THEN
  219.         ' Nur wenn sich der Index geaendert hat!
  220.         IF nidx%>0 THEN
  221.          ' Alten Nebenmenue-Index, sofern schon invertiert, restaurieren
  222.          PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
  223.         ENDIF
  224.         ' Endlich!
  225.         nidx%=idx%
  226.         IF m.n_geht!(hidx%,nidx%) THEN
  227.          GET m.hx%(hidx%)+2,5+nidx%*16,m.ne%(hidx%)-2,20+nidx%*16,ntitl$
  228.          PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$,10
  229.         ELSE
  230.          nidx%=0
  231.         ENDIF
  232.        ENDIF
  233.       ELSE
  234.        ' Maus ausserhalb des Nebenmenue-Bereiches
  235.        IF nidx%>0 THEN
  236.         PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
  237.        ENDIF
  238.        nidx%=0
  239.       ENDIF
  240.      ENDIF
  241.     ENDIF
  242.    ELSE
  243.     IF mx%<80 OR mx%>m.ne%(m.hs%) THEN
  244.      ' Maus ausserhalb des rechten Randes
  245.      IF nidx%>0 THEN
  246.       PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
  247.      ENDIF
  248.      nidx%=0
  249.     ENDIF
  250.     IF mx%<80 AND my%<18 THEN
  251.      ' Maus zeigt auf DESKTOP-Eintrag!
  252.      IF hidx%>0 THEN
  253.       ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
  254.       PUT m.hx%(hidx%),1,htitl$
  255.       PUT m.hx%(hidx%),19,nmen$
  256.      ENDIF
  257.      hidx%=0
  258.      hopen!=FALSE
  259.     ENDIF
  260.    ENDIF
  261.   UNTIL m.key&>0 OR mk%>0
  262.   HIDEM
  263.   '
  264.   IF mk%>0 THEN
  265.    IF mx%>24 AND mx%<270 AND my%>31 AND my%<374 THEN
  266.     IF NOT hopen! THEN
  267.      ' Irgendeine Aktion in diesem Feld
  268.     ENDIF
  269.    ENDIF
  270.    IF mx%>312 AND mx%<440 AND my%>48 AND my%<302 THEN
  271.     IF NOT hopen! THEN
  272.      ' Irgendeine Aktion in diesem Feld
  273.     ENDIF
  274.    ENDIF
  275.    ' Menuepunkt angeklickt
  276.    IF nidx%>0 THEN
  277.     PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
  278.    ENDIF
  279.    IF hidx%>0 THEN
  280.     ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
  281.     PUT m.hx%(hidx%),1,htitl$
  282.     PUT m.hx%(hidx%),19,nmen$
  283.    ENDIF
  284.    IF hidx%=0 OR nidx%=0 THEN
  285.     hidx%=0
  286.     nidx%=0
  287.    ENDIF
  288.    hopen!=FALSE
  289.   ELSE
  290.    ' Taste betaetigt
  291.    t$=UPPER$(CHR$(m.asc|))
  292.    IF hopen! THEN
  293.     ' Hauptmenue offen, Nebenmenues heruntergeklappt
  294.     ' Finde Nebenmenue-Index
  295.     idx%=0
  296.     REPEAT
  297.      INC idx%
  298.     UNTIL t$=m.nc$(hidx%,idx%) OR idx%>m.ns%(hidx%)
  299.     IF idx%<=m.ns%(hidx%) THEN
  300.      ' Gueltiger Nebenmenue-Index
  301.      IF idx%<>nidx% THEN
  302.       ' Nur wenn sich der Index geaendert hat!
  303.       IF nidx%>0 THEN
  304.        ' Alten Nebenmenue-Index, sofern schon invertiert, restaurieren
  305.        PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$
  306.       ENDIF
  307.       ' Endlich!
  308.       nidx%=idx%
  309.       GET m.hx%(hidx%)+2,5+nidx%*16,m.ne%(hidx%)-2,20+nidx%*16,ntitl$
  310.       PUT m.hx%(hidx%)+2,5+nidx%*16,ntitl$,10
  311.      ENDIF
  312.     ELSE
  313.      ' Buchstabe NICHT ein gueltiger Anfangsbuchstabe: Zuklappen
  314.      PUT m.hx%(hidx%),1,htitl$
  315.      PUT m.hx%(hidx%),19,nmen$
  316.      hidx%=0
  317.      nidx%=0
  318.      hopen!=FALSE
  319.     ENDIF
  320.    ELSE
  321.     @direkt_befehl
  322.     ' Nebenmenue noch nicht heruntergeklappt
  323.     idx%=0
  324.     REPEAT
  325.      INC idx%
  326.     UNTIL t$=m.hc$(idx%) OR idx%>m.hs%
  327.     IF idx%<=m.hs% THEN
  328.      ' Gueltiger Hauptmenue-Index
  329.      IF mx%<80 AND my%<18 THEN
  330.       ' Maus zeigt auf DESKTOP-Eintrag!
  331.       SETMOUSE m.hx%(idx%)+8,my%
  332.      ENDIF
  333.      IF idx%<>hidx% THEN
  334.       IF hidx%>0 THEN
  335.        PUT m.hx%(hidx%),1,htitl$
  336.        PUT m.hx%(hidx%),19,nmen$
  337.       ENDIF
  338.       hidx%=idx%
  339.       oldhidx%=idx%
  340.       GET m.hx%(hidx%),1,m.he%(hidx%),15,htitl$
  341.       PUT m.hx%(hidx%),1,htitl$,10
  342.       GET m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%),nmen$
  343.       DEFFILL 0,0
  344.       PBOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
  345.       BOX m.hx%(hidx%),19,m.ne%(hidx%),m.ns_pix%(hidx%)
  346.       FOR i%=1 TO m.ns%(hidx%)
  347.        IF m.n_geht!(hidx%,i%) THEN
  348.         DEFTEXT ,0,,13
  349.        ELSE
  350.         DEFTEXT ,2,,13
  351.        ENDIF
  352.        TEXT m.hx%(hidx%)+2,17+i%*16,m.n_titl$(hidx%,i%)
  353.        IF m.n_geht!(hidx%,i%) AND m.nc$(hidx%,i%)<"[" THEN
  354.         LINE m.hx%(hidx%)+3+m.nc_p%(hidx%,i%),19+i%*16,m.hx%(hidx%)+9+m.nc_p%(hidx%,i%),19+i%*16
  355.        ENDIF
  356.       NEXT i%
  357.       hopen!=TRUE
  358.      ENDIF
  359.     ELSE
  360.      ' Buchstabe KEIN gueltiger Hauptmenue-Anfangsbuchstabe
  361.      IF hidx%>0 THEN
  362.       ' Falls Nebenmenue offen und Hauptmenuepunkt invertiert: Zuklappen
  363.       PUT m.hx%(hidx%),1,htitl$
  364.       PUT m.hx%(hidx%),19,nmen$
  365.      ENDIF
  366.      hidx%=0
  367.      nidx%=0
  368.      hopen!=FALSE
  369.     ENDIF
  370.    ENDIF
  371.   ENDIF
  372.   '
  373.   IF hidx%>0 AND nidx%>0 THEN
  374.    PUT m.hx%(hidx%),1,htitl$
  375.    PUT m.hx%(hidx%),19,nmen$
  376.    no%=m.com_nr%(hidx%,nidx%)
  377.    hidx%=0
  378.    nidx%=0
  379.    hopen!=FALSE
  380.    @ausfuehren(no%,mk%)
  381.   ENDIF
  382.   '
  383.   EXIT IF abbruch!
  384.   '
  385.  LOOP
  386. RETURN ! main
  387. '
  388. PROCEDURE ausfuehren(num%,click%)
  389.  SELECT num%
  390.  CASE 1 ! LADEN
  391.  CASE 2 ! SPEICHERN
  392.  CASE 3 ! QUIT
  393.   IF click%>0 THEN
  394.    PAUSE 20
  395.   ENDIF
  396.   ALERT 2,"FNT_ED.GFA|Wirklich Verlassen?",1,"JA|Nein",w%
  397.   IF w%=1 THEN
  398.    abbruch!=TRUE
  399.   ENDIF
  400.  CASE 4 ! WechsleFont
  401.  CASE 6 ! BLANK
  402.  CASE 7 ! SYSTEM-Font
  403.  CASE 8 ! INVERTIEREN
  404.  CASE 15 ! COPY Char
  405.  CASE 16 ! PASTE Char
  406.  CASE 17 ! KILL Char
  407.  CASE 18 ! INVERT Char
  408.  CASE 19 ! TAUSCHE Char
  409.  CASE 22 ! HILFE
  410.  CASE 25 ! RASTER
  411.  DEFAULT
  412.   IF click%>0 THEN
  413.    PAUSE 20
  414.   ENDIF
  415.   ALERT 1,"Funktion "+STR$(no%)+"|Noch nicht|Implementiert!",1,"WEITER",dummy%
  416.  ENDSELECT
  417. RETURN ! ausfuehren
  418. '
  419. PROCEDURE direkt_befehl
  420.  LOCAL x%,y%,k%
  421.  LOCAL adr%,i%,w|
  422.  adr%=SHL(chr%,4)
  423.  ADD adr%,fntadr%
  424.  SELECT m.scan|
  425.  CASE &H4B
  426.  CASE &H4D
  427.  CASE &H48
  428.  CASE &H50
  429.  CASE &H4A ! -
  430.  CASE &H4E ! +
  431.  CASE 46 ! C
  432.  CASE 25 ! P
  433.  CASE 23 ! I
  434.  CASE 20 ! T
  435.  ENDSELECT
  436. RETURN ! direkt_befehl
  437. '
  438. PROCEDURE m_getkey
  439.  m.key&=MENU(14)
  440. RETURN
  441. '
  442. PROCEDURE m_deal
  443.  @m_aufbau
  444. RETURN ! m_deal
  445. '
  446. PROCEDURE schluss
  447.  MENU KILL
  448.  END
  449. RETURN ! abmelden
  450. '
  451.  
  452.